#include <bits/stdc++.h>

using namespace std;

class Solution
{
public:
    // void print_stack(stack<int> stk)
    // {
    //     while (!stk.empty())
    //     {
    //         cout << stk.top() << " ";
    //         stk.pop();
    //     }
    //     cout << endl;
    // }

    // int stringtoint(string &s)
    // {
    //     if (s[0] != '-')
    //     {
    //         int num = 0;
    //         for (auto ch : s)
    //         {
    //             num = num * 10;
    //             num = num + (ch - '0');
    //         }
    //         return num;
    //     }
    //     else
    //     {
    //         int num = 0;
    //         int length = s.size();
    //         for (int i = 1; i < length; i++)
    //         {
    //             num = num * 10;
    //             num = num + (s[i] - '0');
    //         }
    //         return -num;
    //     }
    // }

    // int evalRPN(vector<string> &tokens)
    // {
    //     stack<int> stk;
    //     for (auto s : tokens)
    //     {
    //         if ((s[0] == '-' && s.size() != 1) || (s[0] >= '0' && s[0] <= '9'))
    //         {
    //             int num = stringtoint(s);
    //             stk.push(num);
    //             // print_stack(stk);
    //         }
    //         else
    //         {
    //             int num1 = stk.top();
    //             stk.pop();
    //             int num2 = stk.top();
    //             stk.pop();
    //             if (s[0] == '+')
    //             {
    //                 stk.push(num1 + num2);
    //                 // print_stack(stk);
    //             }
    //             else if (s[0] == '-')
    //             {
    //                 stk.push(num2 - num1);
    //                 // print_stack(stk);
    //             }
    //             else if (s[0] == '*')
    //             {
    //                 stk.push(num1 * num2);
    //                 // print_stack(stk);
    //             }
    //             else if (s[0] == '/')
    //             {
    //                 stk.push(num2 / num1);
    //                 // print_stack(stk);
    //             }
    //         }
    //     }
    //     return stk.top();
    // }

    int evalRPN(vector<string> &tokens)
    {
        stack<int> stk;
        int length = tokens.size();
        for (int i = 0; i < length; i++)
        {
            if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/")
            {
                int num1 = stk.top();
                stk.pop();
                int num2 = stk.top();
                stk.pop();
                if (tokens[i] == "+")
                {
                    stk.push(num2 + num1);
                }
                else if (tokens[i] == "-")
                {
                    stk.push(num2 - num1);
                }
                else if (tokens[i] == "*")
                {
                    stk.push(num2 * num1);
                }
                else if (tokens[i] == "/")
                {
                    stk.push(num2 / num1);
                }
            }
            else
            {
                stk.push(stoi(tokens[i]));
            }
        }
        return stk.top();
    }
};

int main()
{
    // vector<string> vec{"2", "1", "+", "3", "*"};
    // vector<string> vec{"4", "13", "5", "/", "+"};
    vector<string> vec{"10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"};
    // vector<string> vec{"4", "3", "-"};
    Solution sol;
    cout << sol.evalRPN(vec) << endl;
    return 0;
}